package com.atguigu.base64;

import com.sun.org.apache.xml.internal.security.utils.Base64;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

/**
 * Base64Demo
 * @author 马伟奇
 * CreateTime: 2020-05-05
 * Description:
 * 当字节不够的时候，需要使用 = 进行补齐
 */
public class Base64Demo {


    public static void main(String[] args) {

        useUtilBase64("艹");

        miscBase64("艹");

    }


    public static void apacheBase64() {
        // 1 表示一个字节，不够3个字节
        // MQ==：需要注意，在使用base64 ，进行编码的时候，如果字节不够3个字节，需要使用=进行补齐
        byte[] bytes1 = "1".getBytes();
        System.out.println("bytes1.length ==> " + bytes1.length);
        System.out.println(Base64.encode(bytes1));  //
        // 如果是2个字节，就补齐一个=号
        System.out.println(Base64.encode("12".getBytes()));
        System.out.println(Base64.encode("123".getBytes()));
        // 硅谷：是6个字节 6 * 8 = 48 ，刚刚好被整除，所以就没有=号

        byte[] bytesG = "硅谷".getBytes();
        System.out.println("bytesG.length = " + bytesG.length);
        System.out.println(Base64.encode(bytesG));   // 6 -> 8 (2* 4 个 (00+6bit ) 构成的字节 )


    }


    /**
     * java.util.Base64
     */
    private static void useUtilBase64(String str) {
        byte[] bytes = str.getBytes();

        //Base64 加密
        String encoded = java.util.Base64.getEncoder().encodeToString(bytes);
        System.out.println("Java.util.Base64 加密后：" + encoded);

        //Base64 解密
        byte[] decoded = java.util.Base64.getDecoder().decode(encoded);

        String decodeStr = new String(decoded);
        System.out.println("Java.util.Base64  解密后：" + decodeStr);

        System.out.println();


    }


    /**
     * BASE64加密解密
     */
    private static void miscBase64(String str) {
        String data = new BASE64Encoder().encodeBuffer(str.getBytes());
        System.out.println("sun.misc.BASE64 加密后：" + data);

        byte[] byteArray = new byte[0];
        try {
            byteArray = new BASE64Decoder().decodeBuffer(data);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("sun.misc.BASE64 解密后：" + new String(byteArray));
    }


}
